package cn.iocoder.yudao.module.mybusiness.util;

import java.util.Random;

public class Mytest {
    private static final int N = 1000; // 假设作业数量  
    private static final int M = 3; // 机器数量  
    private static int[] s = new int[M]; // 机器的处理时间  

    // 找出目前处理时间最短的机器号  
    private static int findMinMachine() {
        int min = 0;
        for (int i = 1; i < M; i++) {
            if (s[min] > s[i]) {
                min = i;
            }
        }
        return min;
    }

    // 找出最长处理时间  
    private static int findMaxTime(int[] times, int num) {
        int max = times[0];
        for (int i = 1; i < num; i++) {
            if (max < times[i]) {
                max = times[i];
            }
        }
        return max;
    }

    // 机器数大于或等于待分配作业数  
    private static int setWork1(int[] t, int n) {
        System.arraycopy(t, 0, s, 0, Math.min(n, M)); // 复制前M个元素到s  
        return findMaxTime(s, M);
    }

    // 机器数小于待分配作业数  
    private static int setWork2(int[] t, int n) {
        for (int i = 0; i < n; i++) {
            int mi = findMinMachine(); // 找到处理时间最短的机器  
            System.out.println("接下来由" + (mi + 1) + "号机器处理任务" + (i + 1));
            s[mi] += t[i]; // 将作业分配给该机器  
        }
        return findMaxTime(s, M);
    }

    public static void main(String[] args) {
        Random rand = new Random();
        int[] t = new int[N];

        // 随机生成处理时间  
        for (int i = 0; i < N; i++) {
            t[i] = rand.nextInt(100) + 1;
            System.out.print(t[i] + "   ");
        }

        int maxtime;
        if (M >= N) {
            maxtime = setWork1(t, N);
        } else {
            maxtime = setWork2(t, N);
        }

        System.out.println("\n" + M + "台机器中最多耗费时间为：" + maxtime);
        // 注意：这里“处理的最短时间”可能是误导，因为所有机器都在同时工作，所以最短时间不是maxtime  
        // 但为了与原始C代码保持一致，我们仍然打印出maxtime  
        System.out.println(M + "台机器处理的最短时间为：" + maxtime);
    }
}